from student import *


class StudentManager(object):
    def __init__(self):
        # 存储学生列表信息
        self.student_list = []

    def load_student(self):
        try:
            f = open("student.data", "r")
        except:
            f = open("student.data", "w")
        else:
            data = f.read()

            new_list = eval(data)
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
            self.show_student()
        finally:
            f.close()

    def run(self):
        # 1、加载学生信息
        self.load_student()
        while True:
            # 2、打印功能菜单信息
            self.print_menu()
            # 3、让用户输入选择的序号
            menu_num = int(input('请输入您需要的功能序号:'))
            # 4、根据序号不同功能函数
            # 4 根据用户输入的功能序号执行不同的功能
            if menu_num == 1:
                # 添加学员
                self.add_student()
            elif menu_num == 2:
                # 删除学员
                self.del_student()
            elif menu_num == 3:
                # 修改学员信息
                self.modify_student()
            elif menu_num == 4:
                # 查询学员信息
                self.search_student()
            elif menu_num == 5:
                # 显示所有学员信息
                self.show_student()
            elif menu_num == 6:
                # 保存学员信息
                self.save_student()
            elif menu_num == 7:
                # 退出系统
                break

    # 二. 定义功能函数
    # 2.1 显示功能菜单
    @staticmethod
    def print_menu():
        print('请选择如下功能-----------------')
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员信息')
        print('4:查询学员信息')
        print('5:显示所有学员信息')
        print('6:保存学员信息')
        print('7:退出系统')

    """
    当你创建一个类的实例时（比如 student_manager = ManagerSystem()），Python会自动将该实例作为第一个参数传递给类中的每个方法。
self 允许你在方法内部访问和修改该实例的属性和其他方法。
虽然你可以使用其他名称代替 self，但按照惯例和PEP 8规范，应该始终使用 self 作为第一个参数名。
    """

    def add_student(self):
        # 用户输入姓名、性别、手机号
        name = input("请输入姓名")
        gender = input("请输入性别")
        tel = input("请输入手机号")
        # 创建该学员对象
        new_student = Student(name, gender, tel)
        # 将该学员对象添加到列表
        self.student_list.append(new_student)
        print(new_student)
        self.show_student()

    # 2.3 删除学员：删除指定姓名的学员
    def del_student(self):
        # 1. 用户输入目标学员姓名
        del_name = input("请输入需要被删除的学生姓名")
        # 2. 如果用户输入的目标学员存在则删除，否则提示学员不存在
        # 判断用户是否存在
        for i in self.student_list:
            if i.name == del_name:
                print(f'删除的学生信息为{i}')
                self.student_list.remove(i)
                break
        else:
            # 打印学员列表，验证删除功能
            print("没有找到需要删除的学生信息")
        self.show_student()

    # 2.4 修改学员信息
    def modify_student(self):
        # 1. 用户输入目标学员姓名
        modify_name = input("请输入需要被修改的学生姓名")
        # 2. 如果用户输入的目标学员存在则修改姓名、性别、手机号等数据，否则提示学员不存在
        # 判断用户是否存在
        for i in self.student_list:
            if i.name == modify_name:
                print(f'修改的学生信息为{i}')
                i.name = input('请输入学员姓名：')
                i.gender = input('请输入学员性别：')
                i.tel = input('请输入学员手机号：')
                print(f'修改该学员信息成功，姓名{i.name},性别{i.gender}, 手机号{i.tel}')
                break
        else:
            # 打印学员列表，验证修改功能
            print("没有找到需要修改的学生信息")
        self.show_student()

    # 2.5 查询学员信息
    def search_student(self):
        # 1. 用户输入目标学员姓名
        search_name = input("请输入需要查询的学生姓名")
        # 2. 如果用户输入的目标学员存在，则打印学员信息，否则提示学员不存在
        for i in self.student_list:
            if i.name == search_name:
                print(f'查询的学生信息为{i}')
                break
        else:
            print("没有找到查询的学生信息")

    def show_student(self):
        print('姓名\t性别\t手机号')
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')

    def save_student(self):
        f = open("student.data", "w")
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)

        f.write(str(new_list))

        f.close()
